class ProgramacionPago < ActiveRecord::Base
	belongs_to :reserva
	belongs_to :moneda
	belongs_to :estado_pago
	
	def archivo
		reserva.archivo
	end
	
	def self.find_by_date(date)
		find(:all, :conditions=>["fecha_max=?", Date.parse(date)])
	end
	
	def self.detalle_programacion(date)
		sql = "select 
				pp.fecha_max as fecha,
				'O.S.' as clase,
				r.id as numero,
				a.codigo as grupo,
				p.nombre as descripcion,
				m.simbolo,
				case
					when m.id = 1 then pp.monto
					else 0.00
				end as soles,
				case
					when m.id = 2 then pp.monto
					else 0.00
				end as dolares	
			from
				programaciones_pago pp
				JOIN reservas r ON pp.reserva_id = r.id
				JOIN archivos a ON r.archivo_id = a.id
				JOIN proveedores p ON r.proveedor_id = p.id
				JOIN monedas m ON pp.moneda_id = m.id
			where
				pp.fecha_max = ?
				AND NOT EXISTS(
					select * 
					from seguimientos_reserva 
					where	estado_reserva_id = 5	AND reserva_id = r.id)"
		find_by_sql([sql, Date.parse(date)])
	end
	
	def self.to_pdf(date)
		pdf = PDF::Writer.new(:paper=>'A4')
		pdf.select_font "Times-Roman"		
		pdf.margins_cm(0.5)
				
		render_cabecera(pdf)		
		render_pagos(pdf, date)		
				
		pdf.render
	end
	
	def self.render_cabecera(pdf)		
		pdf.add_text_wrap(pdf.absolute_left_margin, pdf.absolute_top_margin - 25, 150, "TRANS TREKPERU E.I.R.L.")		
		pdf.text "PROGRAMACION DE PAGOS", :font_size => 14, :justification=>:center		
		pdf.text	"-"*170, :font_size => 10
	end
	
	def self.render_pagos(pdf, date)
		tabla = PDF::SimpleTable.new
		tabla.heading_font_size = 10
		tabla.font_size = 9
		tabla.show_lines = :none
		tabla.shade_rows = :none
		tabla.position = :left
		tabla.orientation = :right
		tabla.width = 580		
		tabla.column_order = ['fecha', 'clase', 'numero', 'grupo', 'descripcion', 'simbolo', 'soles', 'dolares']		
		tabla.columns["fecha"] = PDF::SimpleTable::Column.new("Fecha") { |col|			
			col.width = 55
		}
		tabla.columns["clase"] = PDF::SimpleTable::Column.new("Clase") { |col|			
			col.width = 40
		}
		tabla.columns["numero"] = PDF::SimpleTable::Column.new("Nro") { |col|			
			col.width = 40
		}
		tabla.columns["grupo"] = PDF::SimpleTable::Column.new("Grupo") { |col|			
			col.width = 80			
		}
		tabla.columns["descripcion"] = PDF::SimpleTable::Column.new("Descripcion") { |col|			
			col.width = 180			
		}
		tabla.columns["simbolo"] = PDF::SimpleTable::Column.new("Mon") { |col|			
			col.width = 30
			col.justification = :right
		}
		tabla.columns["soles"] = PDF::SimpleTable::Column.new("Soles") { |col|			
			col.width = 45
			col.justification = :right
		}
		tabla.columns["dolares"] = PDF::SimpleTable::Column.new("Dolares") { |col|
			col.width = 45
			col.justification = :right
		}
		
		tmp = detalle_programacion(date)
		tabla.data = tmp
		if tmp.size > 0
			tabla.render_on(pdf)		
		end
		pdf.text	"-"*170	
		#Totales		
		pdf.text "Total Soles : S/. #{tmp.select{|os| os.simbolo == 'S/.'}.inject(0) { |t, os| t+=os.soles.to_f}}"
		pdf.text "Total Dolares : US$ #{tmp.select{|os| os.simbolo == 'US$'}.inject(0) { |t, os| t+=os.dolares.to_f}}"		
	end
end
